home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Netware Super Library
/
Netware Super Library.iso
/
pgm_tool
/
lu62
/
debug
/
rem_dir.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-07-03
|
9KB
|
265 lines
/*
* CopyRight 1995. Nicholas Poljakov all rights reserved.
*/
/*********************** REM_DIR ****************************/
/* input-string pointer */
/************************************************************/
#include <string.h>
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <state1.h>
#include <direct.h>
#include <dos.h>
#define MAX_PATH 40
#define MIN 1
extern int sw;
extern char lu_id[8];
extern char tp_id[8];
extern char tp_exist;
extern unsigned long conv_id;
int get_f(void *, int);
dir(p)
char *p;
{
p += 4;
if (memcmp(p,"get",3) == 0)
return(gd());
if (memcmp(p,"mkdir",5) == 0)
return(md(p+6));
if (memcmp(p,"path",4) == 0)
return(pt());
if (memcmp(p,"cd",2) == 0)
return(rcd(p+3));
}
/************************************************************************/
/* gd() - get contents of directory */
/************************************************************************/
gd()
{
struct dt {
char reserv[21];
char attr;
unsigned int time;
unsigned int date;
unsigned long int size;
char name[18];
} *s_dta;
unsigned char rts;
unsigned char wr;
unsigned int max_length ;
struct rc {
unsigned int prim;
unsigned long sec;
} v_rc;
struct msg { /*send_data*/
int len;
char str[sizeof(struct dt)];
} gds;
unsigned long rc;
int length;
max_length = 2017;
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
&gds,
&wr);
if (v_rc.prim != 0) {
return -1;
}
sw = 0;
if ((s_dta = malloc(sizeof(struct dt))) == NULL) {
return -1;
}
while ((get_f(s_dta, 0)) != -1)
{
memcpy(gds.str, s_dta,sizeof(struct dt)) ;
gds.len =sizeof(struct dt) + 2;
length=gds.len;
send_data(tp_id,
conv_id,
&gds,
0,
0,
length,
&v_rc,
&rts);
max_length = 255;
if (v_rc.prim == 0) {
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
&gds,
&wr);
}
else
return -1;
} /* while */
deallocate (tp_id,
conv_id,
Flush,
&v_rc);
if (v_rc.prim != 0) {
return -1;
}
tp_ended (tp_id, &rc);
return 0;
}
/*************************************************************************/
/* md(p) - make a directory */
/*************************************************************************/
md(p)
char *p;
{
unsigned char rts;
unsigned char wr;
unsigned int max_length ;
struct rc {
unsigned int prim;
unsigned long sec;
} v_rc;
struct msg { /*send_data*/
int len;
char str[MIN];
} gds;
unsigned long rc;
int length;
mkdir(p);
max_length = 255;
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
&gds,
&wr);
tp_ended (tp_id, &rc);
return 0;
}
/*****************************************************************************/
/* pt() - get a current path */
/*****************************************************************************/
pt()
{
unsigned char rts;
unsigned char wr;
unsigned int max_length ;
struct rc {
unsigned int prim;
unsigned long sec;
} v_rc;
struct msg { /*send_data*/
int len;
char str[_MAX_PATH];
} gds;
unsigned long rc;
int length;
max_length = 2017;
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
&gds,
&wr);
if (v_rc.prim != 0) {
return -1;
}
_getdcwd(0, gds.str, _MAX_PATH);
gds.len = strlen(gds.str) + 2;
length = gds.len;
send_data(tp_id,
conv_id,
&gds,
0,
0,
length,
&v_rc,
&rts);
deallocate (tp_id,
conv_id,
Flush,
&v_rc);
tp_ended (tp_id, &rc);
return 0;
}
/*****************************************************************************/
/* rcd(p) - make a cd command */
/*****************************************************************************/
rcd(p)
char *p;
{
unsigned char rts;
unsigned char wr;
unsigned int max_length ;
struct rc {
unsigned int prim;
unsigned long sec;
} v_rc;
struct msg { /*send_data*/
int len;
char str[MIN];
} gds;
unsigned long rc;
unsigned char strp[MAX_PATH*2];
int i;
int length;
struct SREGS segregs;
union REGS regs;
regs.h.ah = 0x3b;
regs.x.dx = FP_OFF( p );
segregs.ds = FP_SEG( p );
intdosx( ®s, ®s, &segregs );
max_length = 255;
recwait (tp_id,
conv_id,
ll,
&v_rc,
&length,
max_length,
&rts,
&gds,
&wr);
deallocate (tp_id,
conv_id,
Flush,
&v_rc);
if (v_rc.prim != 0) {
return -1;
}
tp_ended (tp_id, &rc);
return 0;
}
/***************************** THE END *************************************/